package com.xuelang.pipeline.app.resource.impl;

import org.springframework.cloud.client.circuitbreaker.NoFallbackAvailableException;
import java.lang.RuntimeException;
import java.util.concurrent.TimeoutException;
import com.xuelang.pipeline.app.resource.ConfigMapService;
import com.xuelang.pipeline.app.resource.request.ConfigMapRequest;
import com.xuelang.pipeline.client.common.result.ApiResult;
import org.springframework.cloud.openfeign.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author liuyuan.ly
 * @since 2024/7/23 15:00
 */
@Service
@Slf4j
public class ConfigMapServiceFallbackImpl implements FallbackFactory<ConfigMapService> {

    @Override
    public ConfigMapService create(Throwable throwable) {
        String fallReason = throwable.getMessage();
        if (throwable instanceof TimeoutException) {
            fallReason = "Socket connect timeout.";
        } else if (throwable instanceof NoFallbackAvailableException) {
            fallReason = "Bad Request.";
        } else if (throwable instanceof RuntimeException) {
            fallReason = "Runtime exception";
        }

        final String returnFallReason = fallReason;

        log.error("调用fegin数据接口失败。接口名称:{}；失败原因:{}", this.getClass().getName(), fallReason);
        return new ConfigMapService() {
            ApiResult apiResult = ApiResult.fail("worker返回异常：" + returnFallReason);

            @Override
            public ApiResult<Boolean> saveOrUpdate(ConfigMapRequest request) {
                return apiResult;
            }
        };
    }
}
